package org.uc3m.ed.tad.arbol;

/**
 * Iterador para recorrer los elementos de un arbol binario.
 * 
 * @author DEI - ED
 * @version 1.0
 */
public interface IArbolBinarioIterador<C,E> {	
	
	/**
	 * Constantes que definen el recorrido del iterador.
	 * 
	 * <ul>
	 * <li> Preorden. (raiz, subarbol izquierdo, subarbol derecho)
	 * <li> Inorden. (subarbol izquierdo, raiz, subarbol derecho)
	 * <li> Postorden. (subarbol izquierdo, subarbol derecho, raiz)
	 * </ul>
	 */
	public static enum Recorrido {
		Preorden,Inorden,Postorden;
	};		
	
	/**
	 * Hay un elemento posterior a la posicion actual del iterador.
	 * 
	 * @return <code> true </code> Existe un elemento posterior.
	 *         <code> false </code> En caso contrario.
	 */
	public boolean haySiguiente();

	/**
	 * Avanza una posicion el iterador.
	 * 
	 * @return El elemento posterior a la posicion actual del iterador.
	 * @throws NoSuchElementException
	 *             El iterador no tiene elemento posterior.
	 */
	public E siguiente();
}
